bitkeeper revision 1.1159.258.86 (424cff6c82IPl2w_FuJj_0tdGUdFiw)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 1 Apr 2005 07:59:40 +0000 (07:59 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 1 Apr 2005 07:59:40 +0000 (07:59 +0000)
Correctly account for our reference to plugged_queue in blkback.
Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c

index be250a4bf3ab86c0104ff7aafd62e092fa19ca6c..375377b138d396270b91d4d5266028b7b97ea4d4 100644 (file)
@@ -68,10 +68,16 @@ static PEND_RING_IDX pending_prod, pending_cons;
 static kmem_cache_t *buffer_head_cachep;
 #else
 static request_queue_t *plugged_queue;
-static inline void bdev_flush_queue(request_queue_t *q)
+static inline void flush_plugged_queue(void)
 {
-    if ( q->unplug_fn != NULL )
-        q->unplug_fn(q);
+    request_queue_t *q = plugged_queue;
+    if ( q != NULL )
+    {
+        if ( q->unplug_fn != NULL )
+            q->unplug_fn(q);
+        blk_put_queue(q);
+        plugged_queue = NULL;
+    }
 }
 #endif
 
@@ -187,11 +193,7 @@ static int blkio_schedule(void *arg)
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
         run_task_queue(&tq_disk);
 #else
-        if ( plugged_queue != NULL )
-        {
-            bdev_flush_queue(plugged_queue);
-            plugged_queue = NULL;
-        }
+        flush_plugged_queue();
 #endif
     }
 }
@@ -516,8 +518,8 @@ static void dispatch_rw_block_io(blkif_t *blkif, blkif_request_t *req)
 
         if ( (q = bdev_get_queue(bio->bi_bdev)) != plugged_queue )
         {
-            if ( plugged_queue != NULL )
-                bdev_flush_queue(plugged_queue);
+            flush_plugged_queue();
+            blk_get_queue(q);
             plugged_queue = q;
         }